home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 681 / term / source.lha / MacroPanel.c < prev    next >
C/C++ Source or Header  |  1992-05-09  |  13KB  |  437 lines

  1. /*
  2. **    $Id: MacroPanel.c,v 1.4 92/04/21 16:59:03 olsen Sta Locker: olsen $
  3. **    $Revision: 1.4 $
  4. **    $Date: 92/04/21 16:59:03 $
  5. **
  6. **    Editing panel for key macro configuration
  7. **
  8. **    Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_F1,GAD_F2,GAD_F3,GAD_F4,GAD_F5,GAD_F6,GAD_F7,GAD_F8,GAD_F9,
  15.         GAD_F10,GAD_QUALIFIER,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL };
  16.  
  17. #define WIDTH    535
  18. #define HEIGHT    193
  19.  
  20.     /* Some layout assistance. */
  21.  
  22. #define GADGET_WIDTH    88
  23. #define GADGET_COUNT    4
  24. #define GADGET_SPACE    (GADGET_WIDTH + ((WIDTH - 20) - (GADGET_COUNT * GADGET_WIDTH)) / (GADGET_COUNT - 1))
  25.  
  26. STATIC STRPTR ModifierString[5] =
  27. {
  28.     NULL,
  29.     NULL,
  30.     NULL,
  31.     NULL,
  32.     NULL
  33. };
  34.  
  35. STATIC struct Gadget *
  36. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  37. {
  38.     struct Gadget        *Gadget;
  39.     struct NewGadget     NewGadget;
  40.     UWORD             Counter = 0;
  41.  
  42.     LocalizeString(ModifierString,MSG_MACROPANEL_NONE_TXT,MSG_MACROPANEL_CONTROL_TXT);
  43.  
  44.     memset(&NewGadget,0,sizeof(struct NewGadget));
  45.  
  46.     if(Gadget = CreateContext(GadgetList))
  47.     {
  48.         NewGadget . ng_Width        = 484;
  49.         NewGadget . ng_Height        = 14;
  50.         NewGadget . ng_GadgetText    = "F 1";
  51.         NewGadget . ng_TextAttr        = &DefaultFont;
  52.         NewGadget . ng_VisualInfo    = VisualInfo;
  53.         NewGadget . ng_GadgetID        = Counter;
  54.         NewGadget . ng_LeftEdge        = (strlen(NewGadget . ng_GadgetText) + 2) * 8 + 1;
  55.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  56.  
  57.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  58.             GTST_MaxChars,    255,
  59.             GTST_EditHook,    &CommandHook,
  60.             GA_Immediate,    TRUE,
  61.         TAG_DONE);
  62.  
  63.         NewGadget . ng_GadgetText    = "F 2";
  64.         NewGadget . ng_GadgetID        = Counter;
  65.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  66.  
  67.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  68.             GTST_MaxChars,    255,
  69.             GTST_EditHook,    &CommandHook,
  70.             GA_Immediate,    TRUE,
  71.         TAG_DONE);
  72.  
  73.         NewGadget . ng_GadgetText    = "F 3";
  74.         NewGadget . ng_GadgetID        = Counter;
  75.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  76.  
  77.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  78.             GTST_MaxChars,    255,
  79.             GTST_EditHook,    &CommandHook,
  80.             GA_Immediate,    TRUE,
  81.         TAG_DONE);
  82.  
  83.         NewGadget . ng_GadgetText    = "F 4";
  84.         NewGadget . ng_GadgetID        = Counter;
  85.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  86.  
  87.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  88.             GTST_MaxChars,    255,
  89.             GTST_EditHook,    &CommandHook,
  90.             GA_Immediate,    TRUE,
  91.         TAG_DONE);
  92.  
  93.         NewGadget . ng_GadgetText    = "F 5";
  94.         NewGadget . ng_GadgetID        = Counter;
  95.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  96.  
  97.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  98.             GTST_MaxChars,    255,
  99.             GTST_EditHook,    &CommandHook,
  100.             GA_Immediate,    TRUE,
  101.         TAG_DONE);
  102.  
  103.         NewGadget . ng_GadgetText    = "F 6";
  104.         NewGadget . ng_GadgetID        = Counter;
  105.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  106.  
  107.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  108.             GTST_MaxChars,    255,
  109.             GTST_EditHook,    &CommandHook,
  110.             GA_Immediate,    TRUE,
  111.         TAG_DONE);
  112.  
  113.         NewGadget . ng_GadgetText    = "F 7";
  114.         NewGadget . ng_GadgetID        = Counter;
  115.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  116.  
  117.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  118.             GTST_MaxChars,    255,
  119.             GTST_EditHook,    &CommandHook,
  120.             GA_Immediate,    TRUE,
  121.         TAG_DONE);
  122.  
  123.         NewGadget . ng_GadgetText    = "F 8";
  124.         NewGadget . ng_GadgetID        = Counter;
  125.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  126.  
  127.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  128.             GTST_MaxChars,    255,
  129.             GTST_EditHook,    &CommandHook,
  130.             GA_Immediate,    TRUE,
  131.         TAG_DONE);
  132.  
  133.         NewGadget . ng_GadgetText    = "F 9";
  134.         NewGadget . ng_GadgetID        = Counter;
  135.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  136.  
  137.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  138.             GTST_MaxChars,    255,
  139.             GTST_EditHook,    &CommandHook,
  140.             GA_Immediate,    TRUE,
  141.         TAG_DONE);
  142.  
  143.         NewGadget . ng_GadgetText    = "F10";
  144.         NewGadget . ng_GadgetID        = Counter;
  145.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  146.  
  147.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  148.             GTST_MaxChars,    255,
  149.             GTST_EditHook,    &CommandHook,
  150.             GA_Immediate,    TRUE,
  151.         TAG_DONE);
  152.  
  153.         NewGadget . ng_GadgetText    = LocaleString(MSG_MACROPANEL_KEY_MODIFIER_GAD);
  154.         NewGadget . ng_Width        = 140;
  155.         NewGadget . ng_GadgetID        = Counter;
  156.         NewGadget . ng_LeftEdge        = (WIDTH - NewGadget . ng_Width) >> 1;
  157.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  158.  
  159.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  160.             GT_Underscore,    '_',
  161.             GTCY_Labels,    ModifierString,
  162.             GTCY_Active,    0,
  163.         TAG_DONE);
  164.  
  165.         NewGadget . ng_Width        = 88;    /* NEW 52 */
  166.         NewGadget . ng_Height        = 12;
  167.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  168.         NewGadget . ng_GadgetID        = Counter;
  169.         NewGadget . ng_Flags        = 0;
  170.         NewGadget . ng_LeftEdge        = 10;
  171.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  172.  
  173.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  174.             GT_Underscore,    '_',
  175.         TAG_DONE);
  176.  
  177.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_LOAD_GAD);
  178.         NewGadget . ng_GadgetID        = Counter;
  179.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + GADGET_SPACE;
  180.  
  181.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  182.             GT_Underscore,    '_',
  183.         TAG_DONE);
  184.  
  185.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_SAVE_GAD);
  186.         NewGadget . ng_GadgetID        = Counter;
  187.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + GADGET_SPACE;
  188.  
  189.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  190.             GT_Underscore,    '_',
  191.         TAG_DONE);
  192.  
  193.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  194.         NewGadget . ng_GadgetID        = Counter;
  195.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + GADGET_SPACE;
  196.  
  197.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  198.             GT_Underscore,    '_',
  199.         TAG_DONE);
  200.     }
  201.  
  202.     return(Gadget);
  203. }
  204.  
  205. VOID
  206. MacroPanel(struct MacroKeys *MacroKeys)
  207. {
  208.     struct Window        *PanelWindow;
  209.     struct Gadget        *GadgetList = NULL;
  210.     struct Gadget        *GadgetArray[GAD_CANCEL + 1];
  211.     LONG             i;
  212.  
  213.     struct MacroKeys    *Keys;
  214.  
  215.     if(Keys = (struct MacroKeys *)AllocVec(sizeof(struct MacroKeys),MEMF_ANY|MEMF_CLEAR))
  216.     {
  217.         CopyMem(MacroKeys,Keys,sizeof(struct MacroKeys));
  218.  
  219.         if(CreateAllGadgets(&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  220.         {
  221.             if(PanelWindow = OpenWindowTags(NULL,
  222.                 WA_Left,    (Screen -> Width - WIDTH) >> 1,
  223.                 WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  224.                 WA_Width,    WIDTH,
  225.                 WA_Height,    HEIGHT,
  226.  
  227.                 WA_Activate,    TRUE,
  228.                 WA_DragBar,    TRUE,
  229.                 WA_DepthGadget,    TRUE,
  230.                 WA_CloseGadget,    TRUE,
  231.                 WA_RMBTrap,    TRUE,
  232.                 WA_DepthGadget,    TRUE,
  233.                 WA_CustomScreen,Screen,
  234.  
  235.                 WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_ACTIVEWINDOW | BUTTONIDCMP | CYCLEIDCMP | STRINGIDCMP,
  236.  
  237.                 WA_Title,    LocaleString(MSG_MACROPANEL_MACRO_PREFERENCES_TXT),
  238.             TAG_DONE))
  239.             {
  240.                 struct IntuiMessage    *Massage;
  241.                 ULONG             Class,Code;
  242.                 struct Gadget        *Gadget;
  243.                 BYTE             Terminated = FALSE;
  244.  
  245.                 UBYTE             DummyBuffer[256],*DummyChar;
  246.  
  247.                 struct FileRequest    *FileRequest;
  248.  
  249.                 LONG             Modifier = 0;
  250.  
  251.                 PushWindow(PanelWindow);
  252.  
  253.                 AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  254.                 RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  255.                 GT_RefreshWindow(PanelWindow,NULL);
  256.  
  257.                 if(XEmulatorBase && Config . Emulation == EMULATION_EXTERNAL)
  258.                 {
  259.                     ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  260.  
  261.                     for(i = 0 ; i < 10 ; i++)
  262.                     {
  263.                         GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  264.                             GTST_String,    Keys -> Keys[Modifier][i],
  265.                             GA_Disabled,    !(KeyMask & (1 << i)),
  266.                         TAG_DONE);
  267.                     }
  268.                 }
  269.                 else
  270.                 {
  271.                     for(i = 0 ; i < 10 ; i++)
  272.                     {
  273.                         GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  274.                             GTST_String,Keys -> Keys[Modifier][i],
  275.                         TAG_DONE);
  276.                     }
  277.                 }
  278.  
  279.                 ActiveGadget = NULL;
  280.  
  281.                 while(!Terminated)
  282.                 {
  283.                     WaitPort(PanelWindow -> UserPort);
  284.  
  285.                     while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  286.                     {
  287.                         Class    = Massage -> Class;
  288.                         Code    = Massage -> Code;
  289.                         Gadget    = (struct Gadget *)Massage -> IAddress;
  290.  
  291.                         GT_ReplyIMsg(Massage);
  292.  
  293.                         if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  294.                             ActivateGadget(ActiveGadget,PanelWindow,NULL);
  295.  
  296.                         if(Class == IDCMP_VANILLAKEY)
  297.                             KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  298.  
  299.                         if(Class == IDCMP_GADGETDOWN)
  300.                         {
  301.                             if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  302.                                 ActiveGadget = Gadget;
  303.                         }
  304.  
  305.                         if(Class == IDCMP_CLOSEWINDOW)
  306.                             Terminated = TRUE;
  307.  
  308. GadCheck:                    if(Class == IDCMP_GADGETUP)
  309.                         {
  310.                             switch(Gadget -> GadgetID)
  311.                             {
  312.                                 case GAD_QUALIFIER:    for(i = 0 ; i < 10 ; i++)
  313.                                                 strcpy(Keys -> Keys[Modifier][i],GT_STRING(GadgetArray[i]));
  314.  
  315.                                             Modifier = Code;
  316.  
  317.                                             if(XEmulatorBase && Config . Emulation == EMULATION_EXTERNAL)
  318.                                             {
  319.                                                 ULONG KeyMask = XEmulatorGetFreeMacroKeys(XEM_IO,Modifier);
  320.  
  321.                                                 ActiveGadget = NULL;
  322.  
  323.                                                 for(i = 0 ; i < 10 ; i++)
  324.                                                 {
  325.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  326.                                                         GTST_String,    Keys -> Keys[Modifier][i],
  327.                                                         GA_Disabled,    !(KeyMask & (1 << i)),
  328.                                                     TAG_DONE);
  329.  
  330.                                                     if((KeyMask & (1 << i)) && !ActiveGadget)
  331.                                                         ActiveGadget = GadgetArray[GAD_F1 + i];
  332.                                                 }
  333.  
  334.                                                 if(ActiveGadget)
  335.                                                     ActivateGadget(ActiveGadget,PanelWindow,NULL);
  336.                                             }
  337.                                             else
  338.                                             {
  339.                                                 for(i = 0 ; i < 10 ; i++)
  340.                                                 {
  341.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  342.                                                         GTST_String,Keys -> Keys[Modifier][i],
  343.                                                     TAG_DONE);
  344.                                                 }
  345.                                             }
  346.  
  347.                                             break;
  348.  
  349.                                 case GAD_USE:        Terminated = TRUE;
  350.  
  351.                                             for(i = 0 ; i < 10 ; i++)
  352.                                                 strcpy(Keys -> Keys[Modifier][i],GT_STRING(GadgetArray[i]));
  353.  
  354.                                             CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  355.  
  356.                                             break;
  357.  
  358.                                 case GAD_LOAD:        strcpy(DummyBuffer,LastMacros);
  359.  
  360.                                             DummyChar = PathPart(DummyBuffer);
  361.  
  362.                                             *DummyChar = 0;
  363.  
  364.                                             BlockWindow(PanelWindow);
  365.  
  366.                                             if(FileRequest = GetFile(LocaleString(MSG_MACROPANEL_LOAD_MACRO_KEYS_TXT),DummyBuffer,FilePart(LastMacros),DummyBuffer,"term#?",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT)))
  367.                                             {
  368.                                                 if(!LoadMacros(DummyBuffer,Keys))
  369.                                                     MyEasyRequest(Window,LocaleString(MSG_MACROPANEL_COULD_NOT_LOAD_MACRO_KEYS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  370.                                                 else
  371.                                                 {
  372.                                                     strcpy(Config . MacroFile,DummyBuffer);
  373.  
  374.                                                     strcpy(LastMacros,DummyBuffer);
  375.  
  376.                                                     for(i = 0 ; i < 10 ; i++)
  377.                                                     {
  378.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_F1 + i],PanelWindow,NULL,
  379.                                                             GTST_String,Keys -> Keys[Modifier][i],
  380.                                                         TAG_DONE);
  381.                                                     }
  382.                                                 }
  383.                                             }
  384.  
  385.                                             ReleaseWindow(PanelWindow);
  386.  
  387.                                             break;
  388.  
  389.                                 case GAD_SAVE:        strcpy(DummyBuffer,LastMacros);
  390.  
  391.                                             DummyChar = PathPart(DummyBuffer);
  392.  
  393.                                             *DummyChar = 0;
  394.  
  395.                                             BlockWindow(PanelWindow);
  396.  
  397.                                             for(i = 0 ; i < 10 ; i++)
  398.                                                 strcpy(Keys -> Keys[Modifier][i],GT_STRING(GadgetArray[i]));
  399.  
  400.                                             if(FileRequest = GetFile(LocaleString(MSG_MACROPANEL_SAVE_MACRO_KEYS_TXT),DummyBuffer,FilePart(LastMacros),DummyBuffer,"term#?",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT)))
  401.                                             {
  402.                                                 if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct MacroKeys),'KEYS'))
  403.                                                     MyEasyRequest(Window,LocaleString(MSG_MACROPANEL_COULD_NOT_SAVE_MACRO_KEYS_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),DummyBuffer);
  404.                                                 else
  405.                                                     strcpy(LastMacros,DummyBuffer);
  406.                                             }
  407.  
  408.                                             ReleaseWindow(PanelWindow);
  409.  
  410.                                             break;
  411.  
  412.                                 case GAD_CANCEL:    Terminated = TRUE;
  413.  
  414.                                             CopyMem(Keys,MacroKeys,sizeof(struct MacroKeys));
  415.  
  416.                                             break;
  417.  
  418.                                 default:        break;
  419.                             }
  420.                         }
  421.                     }
  422.                 }
  423.  
  424.                 RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  425.  
  426.                 PopWindow();
  427.  
  428.                 CloseWindow(PanelWindow);
  429.             }
  430.         }
  431.  
  432.         FreeGadgets(GadgetList);
  433.  
  434.         FreeVec(Keys);
  435.     }
  436. }
  437.